package com.baseframe.auth.entity;




import com.baseframe.tool.container.Kv;
import lombok.Getter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;


;

/**
 * 用户信息拓展 容器
 * 用户类
 */
/**
 * 这段代码是一个Java类，包括了一些用于实现身份验证和令牌管理的功能。它被定义在com.baseframe.auth.endpoint包中。
 *
 * 首先，有一些导入语句，引入了一些所需的类和工具。这些类包括了一些自定义的权限和令牌相关的常量、属性对象和工具类，还有一些用于生成和验证验证码的工具类和库。
 *
 * 接下来，这个类被注解为@RestController，表示这个类是一个用于处理HTTP请求的控制器，并且返回的结果会直接写入HTTP响应中。
 *
 * 这个类有一个@RequestMapping注解，指定了基本的请求路径为"/oauth"。这意味着下面的所有处理方法的URL都是以"/oauth"开头的。
 *
 * 还有一个@AllArgsConstructor注解，表示生成一个带有所有参数的构造函数。在这种情况下，这个构造函数用于注入一个BaseJwtProperties类型的对象。
 *
 * 下面是这个类中的几个处理请求的方法：
 *
 * 1. getCaptcha()方法用于获取验证码。它使用SpecCaptcha类生成一个验证码图片，然后将验证码正确的值存储在Redis中，并设置了15分钟的过期时间。最后，
 * 返回一个包含了验证码图片和验证码key的Kv对象。
 *
 * 2. logout()方法用于登出用户。根据baseJwtProperties中的配置判断是否是单点登出，然后根据情况从Redis中删除对应的token信息。
 *
 * 3. sndSms()方法用于发送短信验证码。它接受一个phone参数，但是当前方法还没有实现具体的发送短信验证码的功能，返回值为null。
 *
 * 总而言之，这段代码实现了一些身份验证和令牌管理的功能，包括获取验证码、登出和发送短信验证码等。它们是基于Spring Boot和Spring MVC框架实现的，并使
 * 用了一些自定义的权限和令牌相关的类和工具。*/

@Getter
public class BaseUserDetails extends User {
    private final Long userId;
    private final Long roleId;
    private final Kv details;



    public BaseUserDetails(
                            Long userId,
                            String username,
                            String password,
                            Long roleId,
                            Kv details,
                            Collection<? extends GrantedAuthority> authorities
    ) {

        super(username, password, authorities);
        this.roleId=roleId;
        this.userId=userId;
        this.details=details;
    }





}
